package com.chencong.request;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;

/**
 * @author chencong
 * @date 2020/12/14 上午9:35
 */
public class Request {

    private String url; //路径
    private String host;//主机
    private int contentLength;//数据长度
    private String data;//前端传来的数据

    /**
     * 将浏览器发送的inputStream中的数据转换为一个Request对象
     * <p>
     * 主要获取url和data url用来判断那个方法处理这个请求或者下载哪个文件 data 对应的业务需要使用的 用户数据
     *
     * @param br 缓冲字符输入流
     */
    public static Request parse(BufferedReader br) {
        String url = null;
        String host = null;
        int contentLength = 0;
        try {
            // 将浏览器的请求头包含的信息转换为一个Request对象
            Request request = new Request();
            // GET /url HTTP/1.1
            String line;
            // 读取空行后，循环退出
            while ((line = br.readLine()).length() != 0) {
//                System.out.println(line);
                // 第一行请求头数据，包含了请求方式和请求路径，解析请求路径，根据这个路径才能判断返回的资源
                if (line.startsWith("POST") || line.startsWith("GET")) {
                    url = line.split(" ")[1];
                }
                // 后续的请求头中，第二行包含了Host信息
                if (line.startsWith("Host: ")) {
                    host = line.replace("Host: ", "");
                }
                if (line.startsWith("Content-Length: ")) {
                    contentLength = Integer.parseInt(line.replace("Content-Length: ", ""));
                }
//                System.out.println(line);
            }
//            System.out.println("url:" + url);
//            System.out.println("host:" + host);
//            System.out.println("Content-length:" + contentLength);
//            System.out.println("\t\t读取头部文件结束");

            //如果contentLength>0,说明后面还有数据
            if (contentLength > 0) {
//                System.out.println("\t\t开始读取data");
                char[] chars = new char[contentLength];
                int len = br.read(chars);
                String data = new String(chars,0,len);
                request.setData(data);
            }
            request.setContentLength(contentLength);
            request.setUrl(url);
            request.setHost(host);
            return request;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

    public Request() {
    }

    public Request(String url) {
        this.url = url;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public int getContentLength() {
        return contentLength;
    }

    public void setContentLength(int contentLength) {
        this.contentLength = contentLength;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}
